/**********************************************
*  Classes:   MaterialProperty
*  Desc:      Defines a material property. Derives
*             from NodeProperty.
*  Author:    Vaios Kalpias-Ilias (C) 2008-2009
***********************************************/

#ifndef MATERIALPROPERTY_H
#define MATERIALPROPERTY_H

#include "NodeProperty.h"
#include "Vector.h"

class MaterialProperty : public NodeProperty
{
public:

	MaterialProperty();
	~MaterialProperty();

	PropertyType GetType() const
	{
		return PROPERTY_MATERIAL;
	}

	unsigned int GetId() const
	{
		return m_uiId;
	}

	const mth::Vector3& GetAmbient() const
	{
		return m_vAmbient;
	}
	
	const mth::Vector3& GetDiffuse() const
	{
		return m_vDiffuse;
	}

	const mth::Vector3& GetSpecular() const
	{
		return m_vSpecular;
	}

	const mth::Vector3& GetEmissive() const
	{
		return m_vEmissive;
	}

	float GetAlpha() const
	{
		return m_fAlpha;
	}

	float GetShininess() const
	{
		return m_fShininess;
	}

	void SetAmbient(const mth::Vector3& ambient)
	{
		m_vAmbient = ambient;
	}

	void SetDiffuse(const mth::Vector3& diffuse)
	{
		m_vDiffuse = diffuse;
	}

	void SetSpecular(const mth::Vector3& specular)
	{
		m_vSpecular = specular;
	}

	void SetEmissive(const mth::Vector3& emissive)
	{
		m_vEmissive = emissive;
	}

	void SetAlpha (float alpha)
	{
		m_fAlpha = alpha;
	}

	void SetShininess(float shine)
	{
		m_fShininess = shine;
	}
private:

	static unsigned int m_uiGlobalId;
	unsigned int m_uiId;
	mth::Vector3 m_vAmbient;
	mth::Vector3 m_vDiffuse;
	mth::Vector3 m_vSpecular;
	mth::Vector3 m_vEmissive;
	float m_fShininess;
	float m_fAlpha;
};


SmartPointer(MaterialProperty);

#endif